package com.lin.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lin.mapper.DFileMapper;
import com.lin.mapper.DModuleDetailsMapper;
import com.lin.mapper.DModuleMapper;
import com.lin.pojo.DModule;
import com.lin.pojo.DModuleDetails;
import com.lin.pojo.PageVo;
import com.lin.service.DModuleService;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class DModuleServiceImpl extends ServiceImpl<DModuleMapper, DModule> implements DModuleService {
    //自动注入
    @Autowired
    DModuleMapper dModuleMapper;

    @Autowired
    DModuleDetailsMapper dModuleDetailsMapper;

    @Autowired
    DFileMapper dFileMapper;


    //添加
    @Override
    public Map addbyDModule(DModule dModule) {
        Map map=new HashMap();

        Double num=0d;
        int i=0;
        dModule.setCostPriceSum(1d);
        //先添加
        boolean f=this.save(dModule);

        map.put("code","0");
        map.put("msg","制定失败");
        if (f){

            //修改物料组成标志状态
            dFileMapper.upDFilebydesin(dModule.getId());

            //循环添加产品物料组成明细
            for (DModuleDetails dModuleDetails : dModule.getDetails()){

                //做计算
                Double subtotal=(double)dModuleDetails.getAmount();
                subtotal=(subtotal*dModuleDetails.getCostPrice());
                //小计
                dModuleDetails.setSubtotal(subtotal);
                //总和
                num=num+subtotal;

                //物料序号
                i=i+1;
                dModuleDetails.setDetailsNumber(i);
                //拿产品物料组成的id当成父id
                dModuleDetails.setParentId(dModule.getId());

                dModuleDetailsMapper.addbyDModuleDetails(dModuleDetails);

            }
        dModule.setCostPriceSum(num);
        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();
        //做修改
        dModuleMapper.updateById(dModule);
        queryWrapper.eq("COST_PRICE_SUM",dModule.getCostPriceSum());
            map.put("code","1");
            map.put("msg","制定成功");
        }
        return map;
    }



    //查询审核数据
    @Override
    public PageVo<DModule> querybyDmodule(DModule dModule, int pageno, int pagesize) {
        Page<DModule> page=new Page<DModule>(pageno,pagesize);
        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();
        queryWrapper.eq("CHECK_TAG",dModule.getCheckTag());
        Page<DModule> page1 = this.page(page,queryWrapper);
        PageVo<DModule> pageVo = new PageVo<DModule>();
        pageVo.setTotal(page1.getTotal());
        pageVo.setRows(page1.getRecords());

        return pageVo;
    }

    //根据id的查找
    @Override
    public DModule querybyid(DModule dModule) {
        return dModuleMapper.selectById(dModule.getId());
    }


    //根据父id查找
    @Override
    public PageVo<DModuleDetails> querybypid(DModule dModule, Integer pageno, Integer pagesize) {
       System.out.println(dModule);
        Page<DModuleDetails> page=new Page<DModuleDetails>(pageno,pagesize);
        QueryWrapper<DModuleDetails> queryWrapper=new QueryWrapper<DModuleDetails>();
        if (dModule.getId()!=null){
            queryWrapper.eq("PARENT_ID",dModule.getId());
        }
        Page<DModuleDetails> page1 = dModuleDetailsMapper.selectPage(page,queryWrapper);
        PageVo<DModuleDetails> pageVo = new PageVo<DModuleDetails>();
        pageVo.setTotal(page1.getTotal());
        pageVo.setRows(page1.getRecords());

        return pageVo;
    }

    //修改审核状态S001-1
    @Override
    public Map updatebycheck(DModule dModule) {
        Map map=new HashMap();
        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();
        int i=dModuleMapper.updateById(dModule);
        map.put("code","0");
        map.put("msg","审核失败");
        if (i>0){
            map.put("code","1");
            map.put("msg","审核成功");
        }
        return map;
    }

    //修改审核状态S001-2
    @Override
    public Map updatebycheck02(DModule dModule) {
        Map map=new HashMap();
        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();
        int i=dModuleMapper.updateById(dModule);
        map.put("code","0");
        map.put("msg","审核");
        if (i>0){
            //先删除子集
            dModuleDetailsMapper.deletebypid(dModule.getId());
            //后删除父表数据
            dModuleMapper.deleteById(dModule.getId());
            //修改物料组成标志状态
            dFileMapper.upDFilebydesin02(dModule.getId());
            map.put("code","1");
            map.put("msg","审核未通过");
        }
        return map;
    }

    //查询数据
    @Override
    public PageVo<DModule> querybymenu(DModule dModuleint, Integer pageno, Integer pagesize) {
        Page<DModule> page=new Page<DModule>(pageno,pagesize);
        System.out.println(dModuleint);
        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();

        if (!dModuleint.getFirstKindId().equals("未选")){
            queryWrapper.eq("FIRST_KIND_ID",dModuleint.getFirstKindId());
        }
        if (!dModuleint.getSecondKindName().equals("---请选择II级分类---")){
            System.out.println("_-------------------------------------");
            queryWrapper.eq("SECOND_KIND_NAME",dModuleint.getSecondKindName());
        }
        if (!dModuleint.getThirdKindName().equals("---请选择III级分类---")){
            System.out.println("_-------------------------------------");
            queryWrapper.eq("THIRD_KIND_NAME",dModuleint.getThirdKindName());
        }

        Page<DModule> page1 = this.page(page,queryWrapper);

        PageVo<DModule> pageVo = new PageVo<DModule>();
        pageVo.setTotal(page1.getTotal());
        pageVo.setRows(page1.getRecords());
        return pageVo;
    }

    //查找装配树数据
    @Override
    public PageVo<DModuleDetails> querybypid02(DModule dModule, Integer pageno, Integer pagesize) {
        Page<DModuleDetails> page=new Page<DModuleDetails>(pageno,pagesize);
        DModule dModule02=dModuleMapper.selectById(dModule.getId());
        System.out.println("++++++"+dModule02);
        DModuleDetails dModuleDetails=new DModuleDetails();
        QueryWrapper<DModuleDetails> queryWrapper=new QueryWrapper<DModuleDetails>();
        if (dModule02!=null){
            dModuleDetails.setParentId(dModule02.getId());
        }
        if (dModule02!=null){
            queryWrapper.eq("PARENT_ID",dModule02.getId());
        }
        if (dModuleDetails.getId()!=null){
            queryWrapper.eq("ID",dModuleDetails.getId());
        }
        System.out.println("--------"+dModuleDetails);
        PageVo<DModuleDetails> pageVo = new PageVo<DModuleDetails>();
        Page<DModuleDetails> page1 = dModuleDetailsMapper.selectPage(page,queryWrapper);
        pageVo.setTotal(page1.getTotal());
        pageVo.setRows(page1.getRecords());

        return pageVo;
    }

    //修改产品物料
    @Override
    public Map updateNewDmdule(DModule dModule) {
//        Map map=new HashMap();
//        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();
//        int i=dModuleMapper.updateById(dModule);
//        map.put("code","0");
//        map.put("msg","修改失败");
//        if (i>0){
//            //先删除子集
//            dModuleDetailsMapper.deletebypid(dModule.getId());
//            //在添加子集
//
//            //物料序号
//            i=i+1;
//            dModuleDetails.setDetailsNumber(i);
//            //dModuleDetailsMapper.addNewDModuleDetails(dModule.getDetails());
//            map.put("code","1");
//            map.put("msg","修改成功");
//        }
//        return map;

        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();

        Map map=new HashMap();

        Double num=0d;
        int i=0;
        dModule.setCostPriceSum(1d);
        //先删除子表数据
          int dele=dModuleDetailsMapper.deletebypid(dModule.getId());

        map.put("code","0");
        map.put("msg","修改失败");
        System.out.println("---------------"+dele);
        //if (dele>0){
            //循环添加产品物料组成明细
            for (DModuleDetails dModuleDetails : dModule.getDetails()){

                //做计算
                Double subtotal=(double)dModuleDetails.getAmount();
                subtotal=(subtotal*dModuleDetails.getCostPrice());
                //小计
                dModuleDetails.setSubtotal(subtotal);
                //总和
                num=num+subtotal;

                //物料序号
                i=i+1;
                dModuleDetails.setDetailsNumber(i);
                //拿产品物料组成的id当成父id
                dModuleDetails.setParentId(dModule.getId());

                dModuleDetailsMapper.addbyDModuleDetails(dModuleDetails);

            }
            dModule.setCostPriceSum(num);
            //做修改
            dModuleMapper.updateById(dModule);
            //queryWrapper.eq("CHECK_TAG","S001-0");
            queryWrapper.eq("COST_PRICE_SUM",dModule.getCostPriceSum());
            map.put("code","1");
            map.put("msg","修改成功");
        //}
        return map;
    }

    //查询数据
    @Override
    public PageVo<DModule> querybymenu02(DModule dModuleint, Integer pageno, Integer pagesize) {
        Page<DModule> page=new Page<DModule>(pageno,pagesize);
        System.out.println(dModuleint);
        QueryWrapper<DModule> queryWrapper=new QueryWrapper<DModule>();

        if (!dModuleint.getFirstKindId().equals("未选")){
            queryWrapper.eq("FIRST_KIND_ID",dModuleint.getFirstKindId());
        }
        if (!dModuleint.getSecondKindName().equals("---请选择II级分类---")){
            System.out.println("_-------------------------------------");
            queryWrapper.eq("SECOND_KIND_NAME",dModuleint.getSecondKindName());
        }
        if (!dModuleint.getThirdKindName().equals("---请选择III级分类---")){
            System.out.println("_-------------------------------------");
            queryWrapper.eq("THIRD_KIND_NAME",dModuleint.getThirdKindName());
        }
            queryWrapper.eq("CHECK_TAG","S001-1");

        Page<DModule> page1 = this.page(page,queryWrapper);

        PageVo<DModule> pageVo = new PageVo<DModule>();
        pageVo.setTotal(page1.getTotal());
        pageVo.setRows(page1.getRecords());
        return pageVo;
    }



}
